#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <curses.h>

int sprawdz_czy_dobre(char *v) { //funkcja sprawdzajaca lancuch wejsciowy
	int i;
	for(i = 0; v[i] != '\0'; i++) {
		if(v[i] == '1' || v[i] == '0') 
			continue;
		else
			return 0;
	}
	return 1;
}

int main(int argc, char **argv) {

	int c;

	if (argc > 1)
		;
	else {
		fprintf(stderr,"%s: Prosze podac ciag wejsciowy\nUzycie: %s ciag\nnp. %s 110011\n", argv[0], argv[0], argv[0]);
		exit(EXIT_FAILURE);
	}
	if(c = sprawdz_czy_dobre(argv[1])) {
		initscr();
		start_color();
		printw("Jezyk zostal zaakceptowany\n\n");
		printw("Wyswietlona zostanie teraz symulacja graficzna..\n");
		printw("Dowolny klawisz spowoduje przejscie do kolejnego stanu automatu\n");
		refresh();
		getch();
	}
	else {
		fprintf(stderr, "%s: Automat akceptuje tylko ciagi skladajace sie z 0 i 1\n", argv[0]);
		exit(EXIT_FAILURE);
	}

	const int q[] = {0, 1, 2, 3};	//stała tablica zawierająca mozliwe stany
	int state = q[0]; // automat zaczyna prace w stanie q[0]
	int ending = q[2]; // automat konczy prace w stanie q[2]

	int n = strlen(argv[1]);
	int *tab_p = malloc(n*sizeof *tab_p);
	int *tab_we = (int*)stworz_tab_we(argv[1], n); //tablica zawierajaca wejsciowy ciag
	int *tab_s = (int*)stworz_tab_st(tab_we, q, tab_p, state, n);

	rysuj_diagram(tab_s, tab_we, tab_p, q, n);
	
	if(zaakceptowany(tab_s, n, q, ending)) {
		mvprintw(24, 0, "Ciag zostal zaakceptowany. Dowolny klawisz spowoduje wyjscie z programu..\n");
		refresh();
	}
	else {
		mvprintw(24, 0, "Ciag nie zostal zaakceptowany. Dowolny klawisz spowoduje wyjscie z programu..\n");
		refresh();
	}
    refresh(); 
	getch();
	endwin();

	return 0;		
}
